home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 33
/
Amiga Format AFCD33 (Issue 117, Dec 1998).iso
/
-seriously_amiga-
/
archivers
/
unrar
/
src-orig
/
smallfn.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-09-07
|
5KB
|
284 lines
void tunpack(unsigned char *Mem,int Solid,int Mode)
{
if (Mode==OLD_UNPACK)
OldUnpack(Mem,Solid);
else
Unpack(Mem,Solid);
}
int twrite(FILE *stream,void *buf,unsigned len)
{
int rescode;
#ifdef _WIN_32
errno=0;
#endif
rescode=fwrite(buf,1,len,stream);
if (rescode!=len || ferror(stream))
ErrExit(EWRITE,WRITE_ERROR);
#ifdef _WIN_32
if (errno==ENOSPC)
ErrExit(EWRITE,WRITE_ERROR);
#endif
return(rescode);
}
int tread(FILE *stream,void *buf,unsigned len)
{
return(fread(buf,1,len,stream));
}
int tseek(FILE *stream,long offset,int fromwhere)
{
return(fseek(stream,offset,fromwhere));
}
long filelen(FILE *FPtr)
{
long RetPos,SavePos;
SavePos=ftell(FPtr);
tseek(FPtr,0,SEEK_END);
RetPos=ftell(FPtr);
tseek(FPtr,SavePos,SEEK_SET);
return(RetPos);
}
void tclose(FILE *FPtr)
{
if (FPtr!=NULL && fclose(FPtr)==EOF)
ErrExit(ECLOSE,FATAL_ERROR);
}
FILE* FileCreate(char *Name,int OverwriteMode,int *UserReject)
{
FILE *Ptr;
if (UserReject!=NULL)
*UserReject=0;
while (FileExist(Name))
{
if (OverwriteMode==NO_OVERWR)
{
if (UserReject!=NULL)
*UserReject=1;
return(NULL);
}
if (Opt.AllYes || OverwriteAll || OverwriteMode==ALL_OVERWR)
break;
if (OverwriteMode==ASK_OVERWR)
{
mprintf(MFileExists,Name);
Ask(MYesNoAllRenQ);
if (Choice==1)
break;
if (Choice==2)
{
if (UserReject!=NULL)
*UserReject=1;
return(NULL);
}
if (Choice==3)
{
OverwriteAll=1;
break;
}
if (Choice==4)
{
mprintf(MAskNewName);
gets(Name);
continue;
}
if (Choice==5)
ErrExit(EEMPTY,USER_BREAK);
}
}
if ((Ptr=fopen(Name,CREATEBINARY))!=NULL)
return(Ptr);
CreatePath(Name);
return(fopen(Name,CREATEBINARY));
}
int GetKey(void)
{
char Str[80];
gets(Str);
return(Str[0]);
}
int ToUpperCase(int Ch)
{
if (Ch<256)
return(loctoupper(Ch));
else
return(Ch);
}
char* PointToName(char *Path)
{
int I;
char *ChPtr;
for (I=strlen(Path)-1;I>=0;I--)
if (IsPathDiv(Path[I]))
return(&Path[I+1]);
if ((ChPtr=strchr(Path,':'))!=NULL)
return(ChPtr+1);
else
return(Path);
}
void SetExt(char *Name,char *NewExt)
{
char *Ch;
if ((Ch=strrchr(Name,'.'))==NULL)
{
strcat(Name,".");
strcat(Name,NewExt);
}
else
strcpy(Ch+1,NewExt);
}
int GetPassword(int AskCount)
{
int RetCode;
char CmpStr[128],PromptStr[128];
strcpy(PromptStr,MAskPsw);
if (AskCount==1)
{
strcat(PromptStr,MFor);
strcat(PromptStr,PointToName(ArcFileName));
}
mprintf("\n%s: ",PromptStr);
GetPswStr(Password);
if (*Password!=0)
{
if (AskCount==1)
return(1);
mprintf(MReAskPsw1);
GetPswStr(CmpStr);
if (*CmpStr==0)
{
RetCode=-1;
memset(Password,0,sizeof(Password));
}
else
if (strcmp(Password,CmpStr)!=0)
{
memset(Password,0,sizeof(Password));
mprintf(MNotMatchPsw);
RetCode=0;
}
else
RetCode=1;
}
else
{
memset(Password,0,sizeof(Password));
RetCode=-1;
}
memset(CmpStr,0,sizeof(CmpStr));
return(RetCode);
}
void Ask(char *AskStr)
{
char Item[5][40],*ChPtr,AskString[80];
int NumItems=0,Ch,I;
strcpy(AskString,AskStr);
while ((ChPtr=strchr(AskString,'_'))!=NULL)
{
strncpy(Item[NumItems],ChPtr+1,sizeof(Item[NumItems]));
*ChPtr=' ';
if ((ChPtr=strchr(Item[NumItems],'_'))!=NULL)
*ChPtr=0;
if (strcmp(Item[NumItems],MCmpYesStr)==0 && Opt.AllYes)
{
Choice=NumItems+1;
return;
}
NumItems++;
}
mprintf(" %s",Item[0]);
for (I=1;I<NumItems;I++)
mprintf("/%s",Item[I]);
mprintf(" ");
Ch=ToUpperCase(GetKey());
for (Choice=0,I=1;I<=NumItems;I++)
if (Ch==Item[I-1][0])
Choice=I;
}
int ToPercent(long N1,long N2)
{
if (N1 > 10000)
{
N1/=100;
N2/=100;
}
if (N2==0)
return(0);
if (N2<N1)
return(100);
return((int)(N1*100/N2));
}
char* strlower(char *Str)
{
char *ChPtr;
for (ChPtr=Str;*ChPtr;ChPtr++)
*ChPtr=(char)tolower(*ChPtr);
return(Str);
}
char* strupper(char *Str)
{
char *ChPtr;
for (ChPtr=Str;*ChPtr;ChPtr++)
*ChPtr=(char)toupper(*ChPtr);
return(Str);
}
int stricomp(char *Str1,char *Str2)
{
char S1[512],S2[512];
strncpy(S1,Str1,sizeof(S1));
strncpy(S2,Str2,sizeof(S2));
return(strcmp(strupper(S1),strupper(S2)));
}
int strnicomp(char *Str1,char *Str2,int N)
{
char S1[512],S2[512];
strncpy(S1,Str1,sizeof(S1));
strncpy(S2,Str2,sizeof(S2));
return(strncmp(strupper(S1),strupper(S2),N));
}
char* RemoveEOL(char *Str)
{
int I;
for (I=strlen(Str)-1;I>=0 && iscntrl(Str[I]);I--)
Str[I]=0;
return(Str);
}